package com.yxx.quartz.utils;


import org.quartz.CronExpression;

import java.text.ParseException;
import java.util.Date;

/**
 * cron 表达式工具类
 * @author yuxiangxun
 * @date 2025/2/16
 * @apiNote
 */
public class CronUtils {

    /**
     * 返回一个 boolean 类型 代表一个给定的 Cron 表达式的有效值
     * @param cronExpression  Cron 表达式
     * @return boolean 表达式是否有效
     */
    public static boolean isValid(String cronExpression){
        // 调用 CronExpression 类的静态方法来判断传入的 Cron 表达式是否有效
        return CronExpression.isValidExpression(cronExpression);
    }

    /**
     * 根据给定的 Cron 表达式，返回下一个执行时间
     * @param cronExpression Cron 表达式
     * @return 下次 Cron 表达式执行时间
     */
    public static Date getNextExecution(String cronExpression){
        try{
            // 创建一个 CronExpression 对象，用于处理传入的 Cron 表达式
            CronExpression cron = new CronExpression(cronExpression);
            // 获取当前时间，并计算出给定 Cron 表达式的下一个有效执行时间
            return cron.getNextValidTimeAfter(new Date(System.currentTimeMillis()));
        }catch (ParseException e){
            // 如果解析 Cron 表达式时出现错误，抛出 IllegalArgumentException 异常
            throw new IllegalArgumentException(e.getMessage());
        }
    }
}
